package com.atguigu.rabbitmq.two;
import com.atguigu.rabbitmq.util.RabbitMqUtils;
import com.rabbitmq.client.Channel;

import java.io.IOException;
import java.util.Scanner;
import java.util.concurrent.TimeoutException;

/**
 * 工作队列 轮询发放到消费者的工作线程
 * 生产者 发送大量的消息
 *
 *
 * 工作队列(又称为任务队列)的主要思想是避免立即执行资源密集型任务,而不得不等待它完成。
 * 相反我们安排任务在之后执行。我们把任务封装为消息并将其发送到队列。在后台运行的工作进程
 * 将弹出任务并最终执行作业。当有多个工作线程时,这些工作线程将一起处理这些任务。
 *
 *
 *
 */
public class Task01 {


    //指定队列名词
    public static final String QUEUE_NAME = "hello";

    //发送大量的消息
    public static void main(String[] args) throws IOException, TimeoutException {

        Channel channel = RabbitMqUtils.getChanner();

        /**
         * 生成一个队列
         * 参数1: 队列名词
         * 参数2: 队列里面的消息,是否需要持久化,默认情况下消息存储在内存中,持久化是存储在磁盘上。
         *          true是持久化,false不持久化
         *
         * 参数3: 该队列是否只供一个消费者进行消费 是否进行消息的共享,true可以多个消费者消费。
         *          false只能一个消费者消费
         *
         * 参数4: 是否自动删除,最后一个消费者端开连接以后,该队列是否自动删除
         *          true自动删除  false不自动删除
         *
         * 参数5: 其它参数
         */
        channel.queueDeclare(QUEUE_NAME, false, false, false, null);

        //从控制台当中接受信息
        Scanner scanner = new Scanner(System.in);

        while (scanner.hasNext()) {
            String meassge = scanner.next();
            channel.basicPublish("", QUEUE_NAME, null, meassge.getBytes());
            System.out.println("发送消息完成:" + meassge);
        }


    }

}